package com.warm.base.design.s_flyweight;

/**
 * @Date: 2019/11/22 13:40
 * @Author: LChuang
 * @Description:
 *   抽象享元角色一般为抽象类, 在实际项目中一般是一个实现类, 它是描述一类事物的方法.在抽象角色中,
 *   一般需把外部状态和内部状态定义出来,避免子类的随意扩展. 我们对外部状态加上了final关键字,
 *   防止意外发生.获得外部状态, 无意修改了一下, 池就混乱了.
 *
 *   在程序开发中, 确认只需要一次赋值的属性则设置为final类型,避免无意修改导致逻辑混乱.
 */
public abstract class Flyweight {

    /**
     * internal state 内部状态
     */
    private String intrinsic;

    /**
     * external state 外部状态
     */
    protected final String extrinsic;

    /**
     * 享元角色必须接受外部状态
     */
    protected Flyweight(String extrinsic) {
        this.extrinsic = extrinsic;
    }

    /**
     * business operate
     */
    public abstract void operate(String extrinsic);

    public String getIntrinsic() {
        return intrinsic;
    }

    public void setIntrinsic(String intrinsic) {
        this.intrinsic = intrinsic;
    }
}
